import router, { asyncRoutes } from './router'
import { getToken } from './utils/auth'
import store from './store'

// 白名单页面：谁都能去，有没有token都可以去
const WHITE_LIST = ['/login', '/404']

// // 处理一级路由权限数据
// function getFirstRoutePerms(permsArr) {
//   const newArr = permsArr.map(item => {
//     return item.split(':')[0]
//   })
//   return [...new Set(newArr)]
// }

// // 处理二级路由权限数据
// function getSecondRoutePerms(permsArr) {
//   const newArr = permsArr.map(item => {
//     const arr = item.split(':')
//     return `${arr[0]}:${arr[1]}`
//   })
//   return [...new Set(newArr)]
// }

// to: 去哪儿
// from: 从哪儿来
// next: 是否放行
// next() 是方向 next(地址) 跳转到目标地址
router.beforeEach(async(to, from, next) => {
  const token = getToken()
  // TODO: 可以使用卫语句，对下面的 if else 进行优化
  if (token) {
    next()
    // 获取用户信息
    if (!store.state.user.profile.id) {
      // 1. 调用action函数获取用户权限数据
      const permissions = await store.dispatch('user/getProfile')
      // console.log(permissions)
      // 2. 把后端的权限数组格式化成我们自己的俩个权限数据
      // console.log('当前的权限数据为:', permissions)
      // const firstRoutePerms = getFirstRoutePerms(permissions)
      // console.log(firstRoutePerms)
      // const secondRoutePerms = getSecondRoutePerms(permissions)
      // console.log(secondRoutePerms)

      // 拿到动态路由，基于 permissions 数组，查找哪些路由需要注册，哪些不注册

      const routes = asyncRoutes.filter(route => {
        // permissions 中是否包含以  router.permission 开头的字符串
        const res = permissions.find(permStr => permStr.startsWith(route.permission + ':'))
        if (res && route.children) {
          const children = route.children.filter(childRoute => {
            return permissions.find(permStr => permStr.startsWith(childRoute.permission + ':'))
          })
          route.children = children
        }
        return res
      })

      console.log(routes)
      // 完成动态路由的注册
      routes.forEach(item => router.addRoute(item))
    }
  } else {
    if (WHITE_LIST.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})
